home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 142 / Gekkan Dennou Club - 2000.3 Vol. 142 (Japan).7z / Gekkan Dennou Club - 2000.3 Vol. 142 (Japan) (Track 1).bin / imelo / cmscc / sh811.c < prev   
C/C++ Source or Header  |  2000-02-06  |  2KB  |  103 lines

  1. /*
  2.     SH811用MML変換
  3. */
  4.  
  5. #include    <stdio.h>
  6.  
  7. /*
  8. 一応、
  9.     On?fl 
  10.      |||+-音長('1','2','3','4','6','8',16='H')
  11.      ||+--#フラグ('+'or'0'なし)
  12.      |+---音名('C','D','E','F','G','A','B'or'R')
  13.      +----オクターブ('3','4','5')
  14. が保証
  15. */
  16.  
  17.  
  18. int    CMSCC_conv23_SH811(src,dest,err)
  19. unsigned char    *src,*dest,*err;
  20. {
  21.     unsigned char    *s,*d,*e,*k;
  22.     unsigned char    oct,    //オクターブ
  23.             name,    //音名
  24.             sharp,    //#
  25.             len;    //音長
  26.     unsigned char    skip,    //スキップコード
  27.             p;    //実際に押すボタン
  28.  
  29.     s=src;
  30.     d=dest;    *d=NULL;
  31.     e=err;
  32.     k=err;        //@@暫定
  33.  
  34.     while( *s ){
  35.         /*    読み込み
  36.         */
  37.         skip=0;
  38.         switch( *s ){
  39.             case 'O':
  40.                 s++;
  41.                 oct=*s++;
  42.                 name=*s++;
  43.                 sharp=*s++;
  44.                 len=*s++;
  45.             break;
  46.             case ' ': case 0x0d: case 0x0a: case '\t':
  47.                 skip=*s++;
  48.             break;
  49.         }
  50.         
  51.         /*    書きだし
  52.         */
  53.         if( skip==0 ){
  54.             switch(name){
  55.                 case 'C':    p='1';    break;
  56.                 case 'D':    p='2';    break;
  57.                 case 'E':    p='3';    break;
  58.                 case 'F':    p='4';    break;
  59.                 case 'G':    p='5';    break;
  60.                 case 'A':    p='6';    break;
  61.                 case 'B':    p='7';    break;
  62.                 case 'R':    p='0';    break;
  63.             }
  64.             *d++=p;
  65.             
  66.             p='#';
  67.             switch(sharp){
  68.                 case '+':    *d++=p;        break;
  69.             }
  70.             
  71.             p='*';
  72.             switch(oct){
  73.                 case '3':    *d++=p;*d++=p;    break;
  74.                 case '4':            break;
  75.                 case '5':    *d++=p;        break;
  76.             }
  77.             
  78.             
  79.             switch(len){
  80.                 case '1':    p='0';    break;
  81.                 case 'H':    p='1';    break;
  82.                 case '8':    p='2';    break;
  83.                 case '6':    p='3';    break;
  84.                 case '4':    p='4';    break;
  85.                 case '3':    p='5';    break;
  86.                 case '2':    p='6';    break;
  87.             }
  88.             *d++=p;
  89.             
  90.             *d++='>';    //次の文字へマーク
  91.         }
  92.         else{
  93.             //*d++=skip;
  94.         }
  95.     }
  96.     *d++=NULL;
  97.     
  98. }
  99.  
  100.  
  101.  
  102.  
  103.